#include <iostream>
#include <sstream>
#include <map>

/*
 * Standard ros stuff
 */
#include <ros/ros.h>
#include <std_msgs/Int32.h>

//OpenCV Bridge
#include <cv_bridge/CvBridge.h>

//Image Messages
#include <sensor_msgs/Image.h>

//Image Transport
#include <image_transport/image_transport.h>
#include <camera_calibration_parsers/parse.h>

//Markers
#include <interactive_markers/interactive_marker_server.h>
#include <interactive_markers/menu_handler.h>

//Odometry
#include <tf/transform_broadcaster.h>
#include <nav_msgs/Odometry.h>



//Dot Tracker
#include "tracker.h"


#ifndef SEEKER_H_
#define SEEKER_H_

namespace seekDot
{
	class Seeker
	{
		ros::NodeHandle &n;
		image_transport::ImageTransport it;

		int approachSelect;
		int image_count;
		int takeEachNumPic;
		int currentPic;

		//Publishers
		ros::Publisher number_image;
		ros::Publisher pose_out;
		image_transport::CameraPublisher image_circle;
		image_transport::CameraPublisher image_debug;


		//Subscribers
		image_transport::CameraSubscriber camera_sub;
		ros::Subscriber	pose_in;

		//Last Position
		nav_msgs::Odometry last_pose;

		public:
			Seeker(ros::NodeHandle &n);
			virtual ~Seeker();
		private:
			void processImage(const sensor_msgs::ImageConstPtr& msg, const sensor_msgs::CameraInfoConstPtr& camera_info);
			void processPose(const nav_msgs::Odometry::ConstPtr& msg);
	};
}

#endif /* SEEKER_H_ */
